package ve.com.fitsoft.eicb.encuesta.dto;

import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.liferay.faces.util.lang.StringPool;
import com.liferay.portal.kernel.dao.orm.QueryUtil;
import com.liferay.portlet.expando.model.ExpandoRow;
import com.liferay.portlet.expando.model.ExpandoValue;
import com.liferay.portlet.expando.service.ExpandoRowLocalServiceUtil;
import com.liferay.portlet.expando.service.ExpandoValueLocalServiceUtil;

import ve.com.fitsoft.eicb.encuesta.SB.model.Encuesta;
import ve.com.fitsoft.eicb.encuesta.SB.model.Pregunta;

public class ResultadoEncuestaDTO {

	String objetivo;
	String empresa;
	Date fechaInicio;
	Date fechaFin;
	long idEncuesta;
	List<String> empresasParticipantes = new ArrayList<String>();


	long companyId;
	//Key idPregunta
	Map<Long, ResultadoPreguntaDTO> resultadoPreguntas = new LinkedHashMap<Long, ResultadoPreguntaDTO>();
	
	public List<ResultadoPreguntaDTO> getResultadoPreguntas(){
		return new ArrayList<ResultadoPreguntaDTO>(resultadoPreguntas.values());
	}
	public ResultadoEncuestaDTO(Encuesta encuesta, List<Pregunta> preguntas, long companyId){
		this.objetivo = encuesta.getObjetivo();
		this.empresa = encuesta.getEmpresa();
		this.fechaFin = encuesta.getFechaFin();
		this.fechaInicio = encuesta.getFechaInicio();
		this.idEncuesta = encuesta.getIdEncuesta();
		this.companyId = companyId;
		for (Pregunta pregunta : preguntas) {
			resultadoPreguntas.put(pregunta.getIdPregunta(), new ResultadoPreguntaDTO(pregunta.getPregunta()));
		}
		fillParticipaciones();

	}
	
	public void  fillParticipaciones (){
		String tableName = "Expando_Encuesta_"+idEncuesta;
		try{
			List<ExpandoValue> values = ExpandoValueLocalServiceUtil.getColumnValues(companyId, Encuesta.class.getName(), tableName,"Empresa" , QueryUtil.ALL_POS, QueryUtil.ALL_POS);
			for (ExpandoValue expandoValue : values) {
				empresasParticipantes.add(expandoValue.getData());
			}			
			for (long idPregunta : resultadoPreguntas.keySet()) {
				values = ExpandoValueLocalServiceUtil.getColumnValues(companyId, Encuesta.class.getName(), tableName,"Pregunta_"+idPregunta , QueryUtil.ALL_POS, QueryUtil.ALL_POS);
				for (ExpandoValue expandoValue : values) {
					addResultado(idPregunta, expandoValue.getData());
				}
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}		
	
	private void addResultado (Long idPregunta, String resultado){
		resultadoPreguntas.get(idPregunta).addResultado(resultado);
	}
	
	@Override
	public String toString() {
		StringBuffer str = new StringBuffer();
		str.append("---------------   RESULTADOS ENCUESTA ----------------");
		str.append("\n Empresa "+empresa);
		str.append("\n Objetivo"+objetivo);
		str.append("\n Empresas Participantes:");
		for (String empresaPart : empresasParticipantes) {
			str.append("\n     -- "+empresaPart);
		}
		str.append("\n Resultados:");
		for (ResultadoPreguntaDTO resultadoPregunta : resultadoPreguntas.values()) {
			str.append("\n     "+resultadoPregunta.pregunta);
			for (String opcion : resultadoPregunta.resultadoOpcion.keySet()) {
				str.append("\n         "+opcion+": "+resultadoPregunta.resultadoOpcion.get(opcion));
			}
		}
		return str.toString();
	}
	public List<String> getEmpresasParticipantes() {
		return empresasParticipantes;
	}
}

